import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false


/**
 * (1) 利用内置关系：VueComponent.prototype.__proto__=Vue.prototype
 *     这样Vue实例就可以通过原型链获取到
 * (2) 直接在Vue原型上放对象是不行的，因为正常组件对象没有$on
 * */ 
//  Vue.prototype.x = {a:1,b:2}

 
new Vue({
    el:'#app',
    render: h => h(App),
    /**
     * (3) 在页面初始化之前在vm原型上添加个名为$bus，值为vm自己
     *     1.写在页面初始化之前是因为 在页面渲染完成之后就已经无法添加了，已经完工了
     *     2.写在Vue里面是因为 如果写在new Vue前面又获取不到vm(因为声明在后面)
     *     3.名字是$bus是因为 $是给程序员用的，比如底层原型添加属性，bus是因为叫总线，一起用的
     *     4.值为 vm自己是因为，vm可以通过原型链找到 $on $off $emit，方便绑定和触发
     *     5.在原型上添加是因为 方便所有组件都能看见和使用
     *       注意是在Vue原型上，而不是vm原型上
     * */ 
    beforeCreate(){
        Vue.prototype.$bus = this // 安装全局事件总线
    }
})